{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from beakerx import *\n",
    "class ToolTipBuilder:\n",
    "    def getToolTip(self,node):\n",
    "        tooltip = \"\"\n",
    "        if node.isLeaf():\n",
    "            tooltip+=\"<b>Label:</b> \"+ (node.label)\n",
    "\n",
    "            tooltip+=\"<br/>\"\n",
    "            tooltip+=\"<b>Weight:</b> \"+ str(node.weight)\n",
    "            tooltip+=\"<br/>\"\n",
    "            tooltip+=\"<b>Value:</b> \"+ node.labelValue\n",
    "\n",
    "        return tooltip\n",
    "  \n",
    "toolTipBuilder = ToolTipBuilder()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from beakerx import *\n",
    "node = TreeMapNode(\"0\")\n",
    "node00 = TreeMapNode(\"00\", 2, DefaultValue(2))\n",
    "\n",
    "node01 = TreeMapNode(\"01\")\n",
    "node01.add(TreeMapNode(\"011\", 1, DefaultValue(1)))\n",
    "node01.add(TreeMapNode(\"012\", 2, DefaultValue(1)))\n",
    "node01.add(TreeMapNode(\"013\", 3, DefaultValue(1)))\n",
    "\n",
    "node02 = TreeMapNode(\"02\")\n",
    "node02.add(TreeMapNode(\"020\", 2, DefaultValue(2)))\n",
    "node02.add(TreeMapNode(\"021\", 1, DefaultValue(1)))\n",
    "node02.add(TreeMapNode(\"022\", 1, DefaultValue(1)))\n",
    "node02.add(TreeMapNode(\"023\", 1, DefaultValue(1)))\n",
    "node02.add(TreeMapNode(\"024\", 2, DefaultValue(2)))\n",
    "\n",
    "node03 = TreeMapNode(\"03\")\n",
    "node03.add(TreeMapNode(\"030\", 1, DefaultValue(2)))\n",
    "node03.add(TreeMapNode(\"031\", 2, DefaultValue(2)))\n",
    "node03.add(TreeMapNode(\"032\", 3, DefaultValue(2)))\n",
    "node03.add(TreeMapNode(\"033\", 4, DefaultValue(2)))\n",
    "\n",
    "node04 = TreeMapNode(\"04\", 6, DefaultValue(5))\n",
    "\n",
    "node.add(node01)\n",
    "node.add(node02)\n",
    "node.add(node03)\n",
    "node.add(node04)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "big_node = TreeMapNode(\"root\")\n",
    "nodeX = TreeMapNode(\"branch1\")\n",
    "nodeY = TreeMapNode(\"branch2\")\n",
    "\n",
    "for x in range(1, 501):\n",
    "    nodeX.add(TreeMapNode(str(x), x * 2, DefaultValue(x)))\n",
    "    \n",
    "nodeX1 = TreeMapNode(\"branch11\")\n",
    "\n",
    "for x in range(1, 251):\n",
    "    nodeX1.add(TreeMapNode(str(x), x * 2, DefaultValue(x)))\n",
    "\n",
    "nodeX.add(nodeX1)\n",
    "\n",
    "for x in range(1, 501):\n",
    "    nodeY.add(TreeMapNode(str(x), x * 2, DefaultValue(x)))\n",
    "\n",
    "nodeY1 = TreeMapNode(\"branch21\")\n",
    "\n",
    "for x in range(1, 251):\n",
    "    nodeY1.add(TreeMapNode(str(x), x * 2, DefaultValue(x)))\n",
    "nodeY.add(nodeY1)\n",
    "\n",
    "\n",
    "big_node.add(nodeY)\n",
    "big_node.add(nodeX)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "spjson = '{\"name\":\"flare\",\"children\":[{\"name\":\"analytics\",\"children\":[{\"name\":\"cluster\",\"children\":[{\"name\":\"AgglomerativeCluster\",\"size\":3938},{\"name\":\"CommunityStructure\",\"size\":3812},{\"name\":\"HierarchicalCluster\",\"size\":6714},{\"name\":\"MergeEdge\",\"size\":743}]},{\"name\":\"graph\",\"children\":[{\"name\":\"BetweennessCentrality\",\"size\":3534},{\"name\":\"LinkDistance\",\"size\":5731},{\"name\":\"MaxFlowMinCut\",\"size\":7840},{\"name\":\"ShortestPaths\",\"size\":5914},{\"name\":\"SpanningTree\",\"size\":3416}]},{\"name\":\"optimization\",\"children\":[{\"name\":\"AspectRatioBanker\",\"size\":7074}]}]},{\"name\":\"animate\",\"children\":[{\"name\":\"Easing\",\"size\":17010},{\"name\":\"FunctionSequence\",\"size\":5842},{\"name\":\"interpolate\",\"children\":[{\"name\":\"ArrayInterpolator\",\"size\":1983},{\"name\":\"ColorInterpolator\",\"size\":2047},{\"name\":\"DateInterpolator\",\"size\":1375},{\"name\":\"Interpolator\",\"size\":8746},{\"name\":\"MatrixInterpolator\",\"size\":2202},{\"name\":\"NumberInterpolator\",\"size\":1382},{\"name\":\"ObjectInterpolator\",\"size\":1629},{\"name\":\"PointInterpolator\",\"size\":1675},{\"name\":\"RectangleInterpolator\",\"size\":2042}]},{\"name\":\"ISchedulable\",\"size\":1041},{\"name\":\"Parallel\",\"size\":5176},{\"name\":\"Pause\",\"size\":449},{\"name\":\"Scheduler\",\"size\":5593},{\"name\":\"Sequence\",\"size\":5534},{\"name\":\"Transition\",\"size\":9201},{\"name\":\"Transitioner\",\"size\":19975},{\"name\":\"TransitionEvent\",\"size\":1116},{\"name\":\"Tween\",\"size\":6006}]},{\"name\":\"data\",\"children\":[{\"name\":\"converters\",\"children\":[{\"name\":\"Converters\",\"size\":721},{\"name\":\"DelimitedTextConverter\",\"size\":4294},{\"name\":\"GraphMLConverter\",\"size\":9800},{\"name\":\"IDataConverter\",\"size\":1314},{\"name\":\"JSONConverter\",\"size\":2220}]},{\"name\":\"DataField\",\"size\":1759},{\"name\":\"DataSchema\",\"size\":2165},{\"name\":\"DataSet\",\"size\":586},{\"name\":\"DataSource\",\"size\":3331},{\"name\":\"DataTable\",\"size\":772},{\"name\":\"DataUtil\",\"size\":3322}]},{\"name\":\"display\",\"children\":[{\"name\":\"DirtySprite\",\"size\":8833},{\"name\":\"LineSprite\",\"size\":1732},{\"name\":\"RectSprite\",\"size\":3623},{\"name\":\"TextSprite\",\"size\":10066}]},{\"name\":\"flex\",\"children\":[{\"name\":\"FlareVis\",\"size\":4116}]},{\"name\":\"physics\",\"children\":[{\"name\":\"DragForce\",\"size\":1082},{\"name\":\"GravityForce\",\"size\":1336},{\"name\":\"IForce\",\"size\":319},{\"name\":\"NBodyForce\",\"size\":10498},{\"name\":\"Particle\",\"size\":2822},{\"name\":\"Simulation\",\"size\":9983},{\"name\":\"Spring\",\"size\":2213},{\"name\":\"SpringForce\",\"size\":1681}]},{\"name\":\"query\",\"children\":[{\"name\":\"AggregateExpression\",\"size\":1616},{\"name\":\"And\",\"size\":1027},{\"name\":\"Arithmetic\",\"size\":3891},{\"name\":\"Average\",\"size\":891},{\"name\":\"BinaryExpression\",\"size\":2893},{\"name\":\"Comparison\",\"size\":5103},{\"name\":\"CompositeExpression\",\"size\":3677},{\"name\":\"Count\",\"size\":781},{\"name\":\"DateUtil\",\"size\":4141},{\"name\":\"Distinct\",\"size\":933},{\"name\":\"Expression\",\"size\":5130},{\"name\":\"ExpressionIterator\",\"size\":3617},{\"name\":\"Fn\",\"size\":3240},{\"name\":\"If\",\"size\":2732},{\"name\":\"IsA\",\"size\":2039},{\"name\":\"Literal\",\"size\":1214},{\"name\":\"Match\",\"size\":3748},{\"name\":\"Maximum\",\"size\":843},{\"name\":\"methods\",\"children\":[{\"name\":\"add\",\"size\":593},{\"name\":\"and\",\"size\":330},{\"name\":\"average\",\"size\":287},{\"name\":\"count\",\"size\":277},{\"name\":\"distinct\",\"size\":292},{\"name\":\"div\",\"size\":595},{\"name\":\"eq\",\"size\":594},{\"name\":\"fn\",\"size\":460},{\"name\":\"gt\",\"size\":603},{\"name\":\"gte\",\"size\":625},{\"name\":\"iff\",\"size\":748},{\"name\":\"isa\",\"size\":461},{\"name\":\"lt\",\"size\":597},{\"name\":\"lte\",\"size\":619},{\"name\":\"max\",\"size\":283},{\"name\":\"min\",\"size\":283},{\"name\":\"mod\",\"size\":591},{\"name\":\"mul\",\"size\":603},{\"name\":\"neq\",\"size\":599},{\"name\":\"not\",\"size\":386},{\"name\":\"or\",\"size\":323},{\"name\":\"orderby\",\"size\":307},{\"name\":\"range\",\"size\":772},{\"name\":\"select\",\"size\":296},{\"name\":\"stddev\",\"size\":363},{\"name\":\"sub\",\"size\":600},{\"name\":\"sum\",\"size\":280},{\"name\":\"update\",\"size\":307},{\"name\":\"variance\",\"size\":335},{\"name\":\"where\",\"size\":299},{\"name\":\"xor\",\"size\":354},{\"name\":\"_\",\"size\":264}]},{\"name\":\"Minimum\",\"size\":843},{\"name\":\"Not\",\"size\":1554},{\"name\":\"Or\",\"size\":970},{\"name\":\"Query\",\"size\":13896},{\"name\":\"Range\",\"size\":1594},{\"name\":\"StringUtil\",\"size\":4130},{\"name\":\"Sum\",\"size\":791},{\"name\":\"Variable\",\"size\":1124},{\"name\":\"Variance\",\"size\":1876},{\"name\":\"Xor\",\"size\":1101}]},{\"name\":\"scale\",\"children\":[{\"name\":\"IScaleMap\",\"size\":2105},{\"name\":\"LinearScale\",\"size\":1316},{\"name\":\"LogScale\",\"size\":3151},{\"name\":\"OrdinalScale\",\"size\":3770},{\"name\":\"QuantileScale\",\"size\":2435},{\"name\":\"QuantitativeScale\",\"size\":4839},{\"name\":\"RootScale\",\"size\":1756},{\"name\":\"Scale\",\"size\":4268},{\"name\":\"ScaleType\",\"size\":1821},{\"name\":\"TimeScale\",\"size\":5833}]},{\"name\":\"util\",\"children\":[{\"name\":\"Arrays\",\"size\":8258},{\"name\":\"Colors\",\"size\":10001},{\"name\":\"Dates\",\"size\":8217},{\"name\":\"Displays\",\"size\":12555},{\"name\":\"Filter\",\"size\":2324},{\"name\":\"Geometry\",\"size\":10993},{\"name\":\"heap\",\"children\":[{\"name\":\"FibonacciHeap\",\"size\":9354},{\"name\":\"HeapNode\",\"size\":1233}]},{\"name\":\"IEvaluable\",\"size\":335},{\"name\":\"IPredicate\",\"size\":383},{\"name\":\"IValueProxy\",\"size\":874},{\"name\":\"math\",\"children\":[{\"name\":\"DenseMatrix\",\"size\":3165},{\"name\":\"IMatrix\",\"size\":2815},{\"name\":\"SparseMatrix\",\"size\":3366}]},{\"name\":\"Maths\",\"size\":17705},{\"name\":\"Orientation\",\"size\":1486},{\"name\":\"palette\",\"children\":[{\"name\":\"ColorPalette\",\"size\":6367},{\"name\":\"Palette\",\"size\":1229},{\"name\":\"ShapePalette\",\"size\":2059},{\"name\":\"SizePalette\",\"size\":2291}]},{\"name\":\"Property\",\"size\":5559},{\"name\":\"Shapes\",\"size\":19118},{\"name\":\"Sort\",\"size\":6887},{\"name\":\"Stats\",\"size\":6557},{\"name\":\"Strings\",\"size\":22026}]},{\"name\":\"vis\",\"children\":[{\"name\":\"axis\",\"children\":[{\"name\":\"Axes\",\"size\":1302},{\"name\":\"Axis\",\"size\":24593},{\"name\":\"AxisGridLine\",\"size\":652},{\"name\":\"AxisLabel\",\"size\":636},{\"name\":\"CartesianAxes\",\"size\":6703}]},{\"name\":\"controls\",\"children\":[{\"name\":\"AnchorControl\",\"size\":2138},{\"name\":\"ClickControl\",\"size\":3824},{\"name\":\"Control\",\"size\":1353},{\"name\":\"ControlList\",\"size\":4665},{\"name\":\"DragControl\",\"size\":2649},{\"name\":\"ExpandControl\",\"size\":2832},{\"name\":\"HoverControl\",\"size\":4896},{\"name\":\"IControl\",\"size\":763},{\"name\":\"PanZoomControl\",\"size\":5222},{\"name\":\"SelectionControl\",\"size\":7862},{\"name\":\"TooltipControl\",\"size\":8435}]},{\"name\":\"data\",\"children\":[{\"name\":\"Data\",\"size\":20544},{\"name\":\"DataList\",\"size\":19788},{\"name\":\"DataSprite\",\"size\":10349},{\"name\":\"EdgeSprite\",\"size\":3301},{\"name\":\"NodeSprite\",\"size\":19382},{\"name\":\"render\",\"children\":[{\"name\":\"ArrowType\",\"size\":698},{\"name\":\"EdgeRenderer\",\"size\":5569},{\"name\":\"IRenderer\",\"size\":353},{\"name\":\"ShapeRenderer\",\"size\":2247}]},{\"name\":\"ScaleBinding\",\"size\":11275},{\"name\":\"Tree\",\"size\":7147},{\"name\":\"TreeBuilder\",\"size\":9930}]},{\"name\":\"events\",\"children\":[{\"name\":\"DataEvent\",\"size\":2313},{\"name\":\"SelectionEvent\",\"size\":1880},{\"name\":\"TooltipEvent\",\"size\":1701},{\"name\":\"VisualizationEvent\",\"size\":1117}]},{\"name\":\"legend\",\"children\":[{\"name\":\"Legend\",\"size\":20859},{\"name\":\"LegendItem\",\"size\":4614},{\"name\":\"LegendRange\",\"size\":10530}]},{\"name\":\"operator\",\"children\":[{\"name\":\"distortion\",\"children\":[{\"name\":\"BifocalDistortion\",\"size\":4461},{\"name\":\"Distortion\",\"size\":6314},{\"name\":\"FisheyeDistortion\",\"size\":3444}]},{\"name\":\"encoder\",\"children\":[{\"name\":\"ColorEncoder\",\"size\":3179},{\"name\":\"Encoder\",\"size\":4060},{\"name\":\"PropertyEncoder\",\"size\":4138},{\"name\":\"ShapeEncoder\",\"size\":1690},{\"name\":\"SizeEncoder\",\"size\":1830}]},{\"name\":\"filter\",\"children\":[{\"name\":\"FisheyeTreeFilter\",\"size\":5219},{\"name\":\"GraphDistanceFilter\",\"size\":3165},{\"name\":\"VisibilityFilter\",\"size\":3509}]},{\"name\":\"IOperator\",\"size\":1286},{\"name\":\"label\",\"children\":[{\"name\":\"Labeler\",\"size\":9956},{\"name\":\"RadialLabeler\",\"size\":3899},{\"name\":\"StackedAreaLabeler\",\"size\":3202}]},{\"name\":\"layout\",\"children\":[{\"name\":\"AxisLayout\",\"size\":6725},{\"name\":\"BundledEdgeRouter\",\"size\":3727},{\"name\":\"CircleLayout\",\"size\":9317},{\"name\":\"CirclePackingLayout\",\"size\":12003},{\"name\":\"DendrogramLayout\",\"size\":4853},{\"name\":\"ForceDirectedLayout\",\"size\":8411},{\"name\":\"IcicleTreeLayout\",\"size\":4864},{\"name\":\"IndentedTreeLayout\",\"size\":3174},{\"name\":\"Layout\",\"size\":7881},{\"name\":\"NodeLinkTreeLayout\",\"size\":12870},{\"name\":\"PieLayout\",\"size\":2728},{\"name\":\"RadialTreeLayout\",\"size\":12348},{\"name\":\"RandomLayout\",\"size\":870},{\"name\":\"StackedAreaLayout\",\"size\":9121},{\"name\":\"TreeMapLayout\",\"size\":9191}]},{\"name\":\"Operator\",\"size\":2490},{\"name\":\"OperatorList\",\"size\":5248},{\"name\":\"OperatorSequence\",\"size\":4190},{\"name\":\"OperatorSwitch\",\"size\":2581},{\"name\":\"SortOperator\",\"size\":2023}]},{\"name\":\"Visualization\",\"size\":16540}]}]}'\n",
    "aa = json.loads(spjson)\n",
    "\n",
    "def process(node, parent):\n",
    "    treeNode = TreeMapNode(node.get('name'))\n",
    "    if node.get('size') is None:\n",
    "        treeNode = TreeMapNode(node.get('name'))\n",
    "    else:\n",
    "        treeNode = TreeMapNode(node.get('name'), node.get('size'), DefaultValue(node.get('size')))\n",
    "  \n",
    "    parent.add(treeNode)\n",
    "   \n",
    "    children = node.get('children')\n",
    "    if children is not None:\n",
    "        for node in node.get('children'):\n",
    "            process(node, treeNode)\n",
    "\n",
    "\n",
    "real_node = TreeMapNode(\"root\")\n",
    "\n",
    "\n",
    "process(aa, real_node)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from beakerx import *\n",
    "x = TreeMap(\n",
    "  root=  node,\n",
    "  showLegend= True,\n",
    "  title= \"Simple TreeChart\"\n",
    ")\n",
    "x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Other Properties"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* mode\n",
    "* ratio\n",
    "* round\n",
    "* sticky\n",
    "* valueAccessor"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Mode property"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If mode is specified, sets the layout algorithm. If mode is not specified, returns the current layout algorithm, which defaults to \"squarify\". The following modes are supported:\n",
    "\n",
    "* squarify - rectangular subdivision; squareness controlled via the target ratio.\n",
    "* slice - horizontal subdivision.\n",
    "* dice - vertical subdivision.\n",
    "* slice-dice - alternating between horizontal and vertical subdivision."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= node,\n",
    "  mode= Mode.SQUARIFY,\n",
    "  title= \"Mode.SQUARIFY\"\n",
    ")\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= node,\n",
    "  mode= Mode.SLICE,\n",
    "  title= \"Mode.SLICE\"\n",
    ")\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= node,\n",
    "  mode= Mode.DICE,\n",
    "  title= \"Mode.DICE\"\n",
    ")\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= node,\n",
    "  mode= Mode.SLICE_DIC,\n",
    "  title= \"Mode.SLICE_DIC\"\n",
    ")\n",
    "x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Sticky property"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If sticky is specified, sets whether or not the treemap layout is \"sticky\": a sticky treemap layout will preserve the relative arrangement of nodes across transitions. The allocation of nodes into squarified horizontal and vertical rows is persisted across updates \n",
    "by storing a z attribute on the last element in each row; this allows nodes to be resized smoothly, without shuffling or occlusion that would impede perception of changing values. Note, however, that this results in a suboptimal layout for one of the two states. \n",
    "If sticky is not specified, returns whether the treemap layout is sticky.\n",
    "\n",
    "Implementation note: sticky treemaps cache the array of nodes internally; therefore, it is not possible to reuse the same layout instance on multiple datasets. To reset the cached state when switching datasets with a sticky layout, call sticky(true) again. Since version \n",
    "1.25.0, hierarchy layouts no longer copy the input data by default on each invocation, so it may be possible to eliminate caching and make the layout fully stateless."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Round property"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If round is specified, sets whether or not the treemap layout will round to exact pixel boundaries. This can be nice to avoid antialiasing artifacts in SVG. If round is not specified, returns whether the treemap will be rounded."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Ratio property"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If ratio is specified, sets the layout ratio. If ratio is not specified, returns the current layout ratio, which defaults to .5 * (1 + Math.sqrt(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= node,\n",
    "  ratio= 0.5,\n",
    "  title= \"Property 'ratio' is 0.5\"\n",
    ")\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= node,\n",
    "  toolTipBuilder= toolTipBuilder,\n",
    "  colorProvider= RandomColorProvider(),\n",
    "  valueAccessor= ValueAccessor.VALUE,\n",
    "  title= \"ValueAccessor.VALUE\"\n",
    ")\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= node,\n",
    "  toolTipBuilder= toolTipBuilder,\n",
    "  colorProvider= RandomColorProvider(),\n",
    "  valueAccessor= ValueAccessor.WEIGHT,\n",
    "  title= \"ValueAccessor.WEIGHT\"\n",
    ")\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= node,\n",
    "  toolTipBuilder= toolTipBuilder,\n",
    "  title= \"Using custom ToolTipBuilder\"\n",
    ")\n",
    "x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ColorProviders"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In curent moment we are supporting next ColorProviders\n",
    "\n",
    "* RandomColorProvider (default)\n",
    "* GradientColorProvider\n",
    "\n",
    "You can set property 'fromValue' for providers thar uses min and max values. If this property is 'true' then value uses for color calculating. Otherwise - wight."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### RandomColorProvider"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= node,\n",
    "  toolTipBuilder= toolTipBuilder,\n",
    "  colorProvider= RandomColorProvider(),\n",
    "  title= \"Default RandomColorProvider\"\n",
    ")\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "colours = [\n",
    "        Color(255, 0, 0),\n",
    "        Color(0, 255, 0),\n",
    "        Color(0, 0, 255),\n",
    "        Color(255, 255, 0),\n",
    "        Color(255, 0, 255),\n",
    "        Color(0, 255, 255),\n",
    "        Color(102, 102, 51),\n",
    "        Color(255, 51, 153),\n",
    "        Color(255, 153, 51),\n",
    "        Color(204, 204, 51),\n",
    "        Color(205, 102, 204),\n",
    "        Color(51, 153, 255),\n",
    "        Color(153, 102, 0)\n",
    "  ]\n",
    "\n",
    "y = TreeMap(\n",
    "  root= node,\n",
    "  toolTipBuilder= toolTipBuilder,\n",
    "  colorProvider= RandomColorProvider(colours),\n",
    "  title= \"RandomColorProvider with different colours\"\n",
    ")\n",
    "y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### GradientColorProvider"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= node,\n",
    "  toolTipBuilder= toolTipBuilder,\n",
    "  title= \"GradientColorProvider with default colours\"\n",
    ")\n",
    "x.setColorProvider(GradientColorProvider(x))\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= node,\n",
    "  toolTipBuilder= toolTipBuilder,\n",
    "  title= \"GradientColorProvider with overrides colours\"\n",
    ")\n",
    "x.setColorProvider(GradientColorProvider(x, Color.LIGHT_GRAY, Color.DARK_GRAY))\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = TreeMap(\n",
    "  root= big_node,\n",
    "  showLegend= False,\n",
    "  toolTipBuilder= toolTipBuilder,\n",
    "  title= \"Big TreeMap chart (1500 entities)\"\n",
    ")\n",
    "x.setColorProvider(GradientColorProvider(x))\n",
    "x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Example from http://bl.ocks.org/mbostock/4063582"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "colorProvider = RandomColorProvider(\n",
    "  [\n",
    "  '#3182bd',\n",
    "  '#6baed6',\n",
    "  '#9ecae1',\n",
    "  '#c6dbef',\n",
    "  '#e6550d',\n",
    "  '#fd8d3c',\n",
    "  '#fdae6b',\n",
    "  '#fdd0a2',\n",
    "  '#31a354',\n",
    "  '#74c476',\n",
    "  '#a1d99b',\n",
    "  '#c7e9c0',\n",
    "  '#756bb1',\n",
    "  '#9e9ac8',\n",
    "  '#bcbddc',\n",
    "  '#dadaeb',\n",
    "  '#636363',\n",
    "  '#969696',\n",
    "  '#bdbdbd',\n",
    "  '#d9d9d9'\n",
    "    ]\n",
    ")\n",
    "colorProvider.setGroupByParent(True)\n",
    "\n",
    "x = TreeMap(\n",
    "    root= real_node,\n",
    "    showLegend= False,\n",
    "    toolTipBuilder= toolTipBuilder,\n",
    "    colorProvider = colorProvider,\n",
    "    title= \"Flare\",\n",
    "    initWidth= 1300,\n",
    "    initHeight= 600\n",
    ")\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
